package com.sky.category.controller;


import com.sky.category.service.CategoryService;
import com.sky.dto.CategoryDTO;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import com.sky.result.PageResult;
import com.sky.result.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 分类管理 controller
 */
@Slf4j
@Api(tags = {"后台套餐、菜品分类管理"}, description = "后台套餐、菜品分类操作")
@Validated //非空校验形参接收的变量
@RestController
@RequestMapping("/admin/category")
public class CategoryController {

    @Resource
    private CategoryService categoryService;



    /**
     * 分类管理
     *        添加分类
     * @param categoryDTO
     */
    @ApiOperation(tags = {"后台套餐、菜品分类管理"}, value = "新增分类", notes = "数据库新增分类信息")
    @PostMapping
    public Result addCategory(@RequestBody @Validated CategoryDTO categoryDTO){
        log.info("分类管理 - 新增分类：{}", categoryDTO);
        categoryService.addCategory(categoryDTO);
        return Result.success();
    }



    /**
     * 分类管理
     *        分页条件查询
     * @param
     */
    @ApiOperation(tags = {"后台套餐、菜品分类管理"}, value = "分类-分页条件查询", notes = "分类-分页条件查询列表")
    @GetMapping("/page")
    public Result<PageResult> pageQuery(CategoryPageQueryDTO categoryPageQueryDTO){
        log.info("分类管理 - 分页条件查询：{}", categoryPageQueryDTO);
        PageResult pageResult = categoryService.pageQuery(categoryPageQueryDTO);
        return Result.success(pageResult);
    }



    /**
     * 分类管理
     *        启用、禁用
     * @param status
     * @param id
     */
    @ApiOperation(tags = {"后台套餐、菜品分类管理"}, value = "分类禁用、启用", notes = "分类禁用、启用修改")
    @PostMapping("/status/{status}")
    public Result startOrStop(@PathVariable(name="status")Integer status, @NotNull(message = "id为空")Long id){
        log.info("分类管理 - 分类id：{}，status(0禁用/1启用) ==> {}", id, status);
        categoryService.startOrStop(id, status);
        return Result.success();
    }



    /**
     * 分类管理
     *        修改分类信息
     * @param categoryDTO
     */
    @ApiOperation(tags = {"后台套餐、菜品分类管理"}, value = "根据分类id修改", notes = "分类分类id修改分类信息")
    @PutMapping
    public Result updateById(@RequestBody @Validated CategoryDTO categoryDTO){
        log.info("分类管理 - 修改分类信息：{}", categoryDTO);
        categoryService.updateById(categoryDTO);
        return Result.success();
    }



    /**
     * 分类管理
     *         根据id删除  ?id=xxx
     * @param id
     */
    @ApiOperation(tags = {"后台套餐、菜品分类管理"}, value = "根据分类id删除", notes = "根据分类id删除，注意分类下有没有关联餐品、套餐")
    @DeleteMapping
    public Result deleteById(@NotNull(message = "id为空") Long id){
        log.info("分类管理 - 根据id删除：{}", id);
        categoryService.deleteById(id);
        return Result.success();
    }



    /**
     * 分类管理
     *         根据类型查询分类列表  type: 1菜品 2套餐
     */
    @ApiOperation(tags = {"后台套餐、菜品分类管理"}, value = "根据类型type查询", notes = "根据类型type查询列表")
    @GetMapping("/list")
    public Result<List<Category>> selectCategoryList(@NotNull(message = "类型参数为空")Integer type){
        log.info("分类管理 - 根据类型type: {} 查询列表", type);
        List<Category> list = categoryService.selectCategoryListByType(type);
        return Result.success(list);
    }






}
